<?php
/**
 *
 * Created   : 2007-10-10
 * Modified  : 2011-07-26
 * @copyright: [PhpFo.Com] (c) 2011
 * @version  : 1.0.0
 * @package  : Util.String
 * @author   : Joseph Chen (Jsph.chen@gmail.com)
 * @abstract : 字符串操作类
 * @example  :
 */
class String
{

	public static $stringIntType		= 1;
	public static $stringLowerType		= 2;
	public static $stringUpperType		= 4;
	public static $stringSymbolType	= 8;

	/**
	 * 返回一个由多个同一字符串组合成的新字符串
	 * @param int $num
	 * @param string $str
	 */
	public static function str($num, $str)
	{
		return str_repeat($str, $num);
	}

	/**
	 * 用addslashes给变量加入反斜杠,数组则递归给每个子字符串加上
	 * @param string $string
	 */
	public static function addslashes($string)
	{
		if(is_array($string)) {
			foreach($string as $key => $val) {
				$string[$key] = self::addslashes($val, $force);
			}
		} else {
			if (is_string($string)) {
				$string = addslashes($string);
			}
		}
		return $string;
	}

	/**
	 * 判断一个变量的值是否在另一个变量当中,strpos功能扩展
	 * 如果变量是一个数组,则判断是否所有的子元素字符串都在另一个变量(字符串)中
	 * @param string $haystack
	 * @param string|array $needle
	 * @param string $logic
	 */
	public static function posIn($haystack, $needle, $logic='or')
	{
		if (is_array($needle)) {
			foreach ($needle as $item) {
				if ($logic=='or') {//有一个匹配则返回true
					if (false !== strpos($haystack, $item)) {
						return true;
					}
				} else {
					if (false === strpos($haystack, $item)) {
						return false;
					}
				}
			}
			//关系为与的时候,能执行到这一步说明肯定都匹配,返回true
			if ($logic=='and') {
				return true;
			} else {//或关系,有任意一项匹配均已返回true
				return false;
			}
		} else {
			return strpos($haystack, $needle);
		}
	}

	/**
	 * 去除变量的标签(php,html等),如果给出变量是数组,则递归去除每个子元素的字符串中的标签
	 * @param string $string
	 */
	public static function stripTags ($string)
	{
		if(is_array($string)) {
			foreach($string as $key => $val) {
				$string[$key] = self::strip_tags($val, $force);
			}
		} else {
			if (is_string($string)) {
				$string = strip_tags($string);
			}
		}
		return $string;
	}

	/**
	 * 随机一个字符串
	 * @param int $len
	 * @param int $type
	 * @param string $exceptChars 需要排除的字符串
	 */
	public static function randStr($len=8, $type=7, $exceptChars='', $repeatChar=true)
	{
		$numeric = '0123456789';
		$lower	= 'abcdefghijklmnopqrstuvwxyz';
		$upper	= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
		$symbol  = '`~!@#$%^&*()-_=+[{]}/\\|;:\'",<.>/?';
		$ret = $str = '';
		($type & self::$stringIntType) && $str .= $numeric;
		($type & self::$stringLowerType) && $str .= $lower;
		($type & self::$stringUpperType) && $str .= $upper;
		($type & self::$stringSymbolType) && $str .= $symbol;
		for($i=0;$i<$len;$i++)
		{
				
			$rnd = mt_rand(0, strlen($str)-1);
			$char = $str[$rnd];
			if (false !== strpos($exceptChars, $char))
			{
				$i--;
				continue;
			}
			$ret .= $char;
		}
		return $ret;
	}
}
